package com.sxit.tdf.server.util;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;

/** http 工具类 */
public class HttpUtil {

  public static String post(String requestUrl, String accessToken, String params) throws Exception {
    String contentType = "application/x-www-form-urlencoded";
    return HttpUtil.post(requestUrl, accessToken, contentType, params);
  }

  public static String post(
      String requestUrl, String accessToken, String contentType, String params) throws Exception {
    String encoding = "UTF-8";
    if (requestUrl.contains("nlp")) {
      encoding = "GBK";
    }
    return HttpUtil.post(requestUrl, accessToken, contentType, params, encoding);
  }

  public static String post(
      String requestUrl, String accessToken, String contentType, String params, String encoding)
      throws Exception {
    String url = requestUrl + "?access_token=" + accessToken;
    return HttpUtil.postGeneralUrl(url, contentType, params, encoding);
  }

  public static String postGeneralUrl(
      String generalUrl, String contentType, String params, String encoding) throws Exception {
    URL url = new URL(generalUrl);
    // 打开和URL之间的连接
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("POST");
    // 设置通用的请求属性
    connection.setRequestProperty("Content-Type", contentType);
    connection.setRequestProperty("Connection", "Keep-Alive");
    connection.setUseCaches(false);
    connection.setDoOutput(true);
    connection.setDoInput(true);

    // 得到请求的输出流对象
    DataOutputStream out = new DataOutputStream(connection.getOutputStream());
    out.write(params.getBytes(encoding));
    out.flush();
    out.close();

    // 建立实际的连接
    connection.connect();
    // 获取所有响应头字段
    Map<String, List<String>> headers = connection.getHeaderFields();
    // 遍历所有的响应头字段
    for (String key : headers.keySet()) {
      System.err.println(key + "--->" + headers.get(key));
    }
    // 定义 BufferedReader输入流来读取URL的响应
    BufferedReader in = null;
    in = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding));
    String result = "";
    String getLine;
    while ((getLine = in.readLine()) != null) {
      result += getLine;
    }
    in.close();
    System.err.println("result:" + result);
    return result;
  }
}
